package com.adams.audit.operate.service;

import java.util.List;

import com.adams.access.db.bean.AuditRecord;
import com.adams.audit.web.bean.AuditType;
import com.adams.utils.Page;

/**
 * 
 * 
 * File Name : IAuditRecordService.java
 * 
 * @Description : 审核service接口
 */
public interface IAuditRecordService
{
	/**
	 * 
	 * Description : 该接口提供给业务,元数据,栏目管理系统查看审核流程
	 * 
	 * @param contentId
	 * @param typeCode
	 * @param pageNo
	 * @param pageSize
	 * @return
	 * 
	 */
	public Page<AuditRecord> viewAuditFlow(String contentId, String typeCode,
			int pageNo, int pageSize);

	/**
	 * 
	 * Description : 该接口提供给系统内部元数据发送审核通知（审核结果通过接口回调）
	 * 
	 * @param contentId
	 * @param typeCode
	 * @param title
	 * @param operType
	 *            1:新建;2:修改;3:删除
	 * @param viewUrl
	 * @param userID
	 *            提交人ID
	 * @return
	 * 
	 */
	public boolean sendAuditNotice(String contentId, String typeCode,
			String title, int operType, String viewUrl, int userID);

	/**
	 * 
	 * Description : 该接口提供给包括外部资源在内的系统发送审核通知（审核结果通过callbackUrl回传）
	 * 
	 * @param contentId
	 * @param typeCode
	 * @param title
	 * @param operType
	 *            1:新建;2:修改;3:删除
	 * @param viewUrl
	 * @return
	 * 
	 */
	public boolean sendAuditNotice(String contentId, String typeCode,
			String title, int operType, String viewUrl, String callbackUrl,
			int userID);

	/**
	 * 
	 * Description : 分页展示审列表
	 * 
	 * @param userId
	 * @param auditStatus
	 * @param pageNo
	 * @param pageSize
	 * @return
	 * 
	 */
	public Page<AuditRecord> listAuditRecord(String userId, String auditStatus,
			int pageNo, int pageSize);

	/**
	 * 
	 * Description : 根据ID找到审核记录
	 * 
	 * @return
	 * 
	 */
	public AuditRecord findAuditRecordByID(Long ID);

	/**
	 * 
	 * Description : 分页展示已审列表
	 * 
	 * @param userId
	 * @param auditStatus
	 * @param pageNo
	 * @param pageSize
	 * @return
	 * 
	 */
	public Page<AuditRecord> listHasAuditRecord(String userId, int pageNo,
			int pageSize);

	/**
	 * 
	 * Description : 通过
	 * 
	 * @param auditRecord
	 * 
	 */
	public void agree(AuditRecord auditRecord) throws Exception;

	/**
	 * 
	 * Description : 驳回
	 * 
	 * @param auditRecord
	 * 
	 */
	public void refuse(AuditRecord auditRecord) throws Exception;

	/**
	 * 
	 * Description : 获取所有类型
	 * 
	 * @return
	 * 
	 */
	public List<AuditType> getAllType();

	/**
	 * 
	 * Description : 根据id获取AuditRecord
	 * 
	 * @return
	 * 
	 */
	public AuditRecord getByKey(Long id);

	/**
	 * 
	 * Description : 根据contentId和typeCode删除记录
	 * 
	 * @param contentId
	 * @param typeCode
	 * 
	 */
	public void deleteRecord(String contentId, String typeCode);
}
